package com.zoe.onelink.annotation.governance.ratelimit;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * <p>标题: </p>
 * <p>描述: </p>
 * <p>版权: Copyright (c) 2022</p>
 * <p>公司: 智业软件股份有限公司</p>
 *
 * @version: 1.0
 * @author: ruansheng
 * @date: 2022-12-05
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimit {

    /**
     * 限流名称,例如 TestLimit
     */
    String value() default "";

    /**
     * 每秒通过的请求数
     */
    int thresholdPerSeconds();

    /**
     * 限流模式
     */
    MetricType metricType() default MetricType.TYPE_REQUEST_AMOUNT;

    /**
     * 限流消息提示
     */
    String failureMsg() default "";

    enum MetricType {
        /**
         * 直接拒绝
         */
        TYPE_REQUEST_AMOUNT
    }

}
